package com.atelier.plugin.service;

import com.atelier.plugin.database.domain.DataBaseConnectionSettingDto;
import com.atelier.plugin.database.domain.DatabaseConnectionInfo;
import com.atelier.plugin.database.listener.ConnectionListChangeListener;
import com.atelier.plugin.service.impl.DataBaseConnectionStorageServiceImpl;
import com.intellij.openapi.components.PersistentStateComponent;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.project.Project;

import java.util.List;

public interface DataBaseConnectionStorageService extends PersistentStateComponent<DataBaseConnectionSettingDto> {

    // 注册监听器
    void addConnectionListChangeListener(ConnectionListChangeListener listener);

    // 注销监听器
    void removeConnectionListChangeListener(ConnectionListChangeListener listener);

    // 获取实例
    static DataBaseConnectionStorageService getInstance(Project project) {
        return ServiceManager.getService(project,DataBaseConnectionStorageServiceImpl.class);
    }




    // 获取数据库连接信息列表的方法
    List<DatabaseConnectionInfo> getConnectionInfos();

    /**
     * 方法用于添加新的连接信息。
     * @param connectionInfo
     */
    public void addConnectionInfo(DatabaseConnectionInfo connectionInfo);
    /**
     * 方法用于移除连接信息
     * @param connectionInfo
     */
    public void removeConnectionInfo(DatabaseConnectionInfo connectionInfo);
    /**
     * 批量移除连接信息
     * @param connectionInfoList 要移除的连接信息列表
     */
    public void removeConnectionInfos(List<DatabaseConnectionInfo> connectionInfoList);

    /**
     * 方法用于清空所有连接信息。
     */
    void clearConnectionInfos();

    /**
     * 方法用于清空所有连接信息，然后将新的连接信息列表添加到存储中。
     * @param newConnectionInfoList 新的连接信息列表
     */
    void mergeAndClearConnectionInfos(List<DatabaseConnectionInfo> newConnectionInfoList);

}
